package com.goldsprite.gsgecs.entities;

import com.goldsprite.gsgecs.components.IGameComponent;

import java.util.List;
import com.goldsprite.gsgecs.IGameLoop;

// IGameObject 接口 - 定义包含多个组件的游戏物体
/**
 * 游戏实体接口：拥有组件列表和父子级链的游戏实体
 */
public interface IGameObject extends IGameLoop {
	<T extends IGameComponent> void addComponent(T component);
	void addComponent(Class<? extends IGameComponent> componentClass);

	<T extends IGameComponent> void removeComponent(T component); // 通过实例移除
	void removeComponent(int index, Class<? extends IGameComponent> componentClass); // 通过类型移除一个
	void removeComponent(Class<? extends IGameComponent> componentClass); // 通过类型移除一个
	void removeComponents(Class<? extends IGameComponent> componentClass); // 移除所有组件

	<T extends IGameComponent> T getComponent(int index, Class<T> componentClass);
	<T extends IGameComponent> T getComponent(Class<T> componentClass);
	List<? extends IGameComponent> getComponents(Class<? extends IGameComponent> componentClass);

	String getUuid(); // 返回游戏物体的唯一标识符
}
